/*
 * @(#)XfspMintermDirector.java        2004/08/01
 *
 * This file is part of Xfuzzy 3.1, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfsp.model.rulebases;

import java.util.Map;

import xfuzzy.lang.Rule;
import xfuzzy.lang.KnowledgeBase;
import xfuzzy.lang.RuleSet;

/**
 * <p> <b>Descripci�n:</b> construye un conjunto mint�rminos a partir de una
 * base de reglas que la representa a fin de poder ser simplificada por un
 * m�todo tabular.
 * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS>
 * @author Jorge Agudo Praena
 * @version 1.1
 * @see XfspModel
 * @see XfspTabularSimplifier
 * @see XfspMintermBuilder
 *
 */
public class XfspMintermDirector {

  /**
   * <p> <b>Descripci�n:</b> construye un map cuyas claves son las conclusiones
   * de la base de reglas tratada y cuyos valores asociados son los mint�rminos
   * que representan las reglas con dicha conclusi�n.
   * @param rb Base de reglas que se quiere representar en forma de mint�rminos.
   * @return Map cuyas claves son las conclusiones de la base de reglas y cuyos
   * valores asociados a dichas claves son los mint�rminos que representan las
   * reglas que tienen dicha conclusi�n.
   *
   */
  @SuppressWarnings("rawtypes")
public Map build(KnowledgeBase rb) {
    //obtiene las reglas de la base de reglas tratada
    Rule[] rules = ((RuleSet) rb).getRules();
    //crea un constructor de mint�rminos
    XfspMintermBuilder builder = new XfspMintermBuilder();
    //establece las variables de entrada de la base de reglas
    builder.setInputvars(rb.getInputs());
    //para todas las reglas de la base de reglas...
    for (int i = 0; i < rules.length; i++) {
      //...obtiene una nueva regla...
      Rule rule = rules[i];
      //...y contruye el conjunto de mint�rminos que la representa
      builder.buildRule(rule);
    }
    //devuelve el map que representa la base de reglas tratada
    return builder.getMinterms();
  }
}
